package com.example.seventh_home_work

import android.annotation.SuppressLint
import android.app.Notification
import android.app.NotificationChannel
import android.app.NotificationManager
import android.app.Service
import android.content.Context
import android.content.Intent
import android.media.MediaPlayer
import android.os.Binder
import android.os.Build
import android.os.IBinder
import android.provider.MediaStore
import android.util.Log
import android.view.View
import androidx.annotation.RequiresApi
import com.example.seventh_home_work.databinding.ActivityMainBinding
import java.io.IOException

class MusicService : Service() {
    companion object{
        val commond = "Operate"
    }
    val mediaPlayer = MediaPlayer()
    val musicList = mutableListOf<String>()
    val musicNameList = mutableListOf<String>()
    var current =0
    var isPause = false
    val binder = MusicBinder()

    inner class MusicBinder: Binder(){
        val musicName get()= musicNameList.get(current)
        var currentPosition
            get() = mediaPlayer.currentPosition
            set(value) = mediaPlayer.seekTo(value)
        val duration
            get() =mediaPlayer.duration
        val size
            get()=musicList.size
        val currentIndex
            get() = current
    }

    override fun onCreate() {
        super.onCreate()
        getMusicList()
        mediaPlayer.setOnPreparedListener{
            it.start()
        }
        mediaPlayer.setOnCompletionListener {
            current++
            if(current >=musicList.size){
                current=0
            }
            play()
        }
    }

    override fun onStartCommand(intent: Intent?, flags: Int, startId: Int): Int {
        val operate =intent?.getIntExtra(commond,1)
        when(operate){
            1->play()
            2->pause()
            3->stop()
            4->next()
            5->pre()
        }
        return super.onStartCommand(intent, flags, startId)
    }

    fun pause(){
        if(isPause){
            mediaPlayer.start()
            isPause = false
        }else{
            mediaPlayer.pause()
            isPause = true
        }
    }
    fun stop(){
        mediaPlayer.stop()
    }
    fun next(){
        current++
        if(current >=musicList.size){
            current=0
        }
        play()
    }
    fun pre(){
        current--
        if(current <0){
            current=musicList.size-1
        }
        play()
    }

    fun play(){
        if(musicList.size==0) return
        val path = musicList[current]
        mediaPlayer.reset()
        try{
            mediaPlayer.setDataSource(path)
            mediaPlayer.prepareAsync()
        }catch(e: IOException){
            e.printStackTrace()
        }
    }

    @SuppressLint("Range")
    private fun getMusicList(){
        val cursor =
            contentResolver.query(MediaStore.Audio.Media.EXTERNAL_CONTENT_URI,null,null,null,null)
        if(cursor!=null){
            while(cursor.moveToNext()){
                val musicPath=cursor.getString(cursor.getColumnIndex(MediaStore.Audio.Media.DATA))
                musicList.add(musicPath)
                val musicName = cursor.getString(cursor.getColumnIndex(MediaStore.Audio.Media.TITLE))
                musicNameList.add(musicName)
            }
        }
        if (cursor != null) {
            cursor.close()
        }
    }

    override fun onBind(intent: Intent): IBinder {
        return binder
    }
}